target  : crackme 1 by Rev
skill   : easy
cracker : deztroyer^

elo!
To crackme jest prosciutkie a schemat jego zabezpieczenia jest taki:

:0040108C 6800020000              push 00000200
:00401091 68B7314000              push 004031B7
:00401096 6A6A                    push 0000006A
:00401098 FF7508                  push [ebp+08]

* Reference To: user32.GetDlgItemTextA, Ord:00F4h
                                  |
:0040109B E888010000              Call 00401228
:004010A0 83F800                  cmp eax, 00000000
:004010A3 7434                    je 004010D9
:004010A5 33C9                    xor ecx, ecx
:004010A7 EB70                    jmp 00401119
  .
  .
  .
:00401119 803DB731400030          cmp byte ptr [004031B7], 30
:00401120 7C23                    jl 00401145
:00401122 803DB731400039          cmp byte ptr [004031B7], 39
:00401129 771A                    ja 00401145
:0040112B 41                      inc ecx
:0040112C 48                      dec eax
:0040112D 83F800                  cmp eax, 00000000
:00401130 77E7                    ja 00401119

tutaj czyta czy to co wpisalismy do pierwszego okienka to sa cyferki

:00401132 8BC1                    mov eax, ecx
:00401134 83F808                  cmp eax, 00000008	;nastepnie sprawdza czy ma to cos 8 znakow
:00401137 74B5                    je 004010EE		;jak nie to bye bye :)


:004010EE 50                      push eax
:004010EF 33C0                    xor eax, eax
:004010F1 68B7314000              push 004031B7
:004010F6 58                      pop eax
:004010F7 813065544E57            xor dword ptr [eax], 574E5465		<== (1)
:004010FD 83C004                  add eax, 00000004
:00401100 81304B565F50            xor dword ptr [eax], 505F564B		<== (2)
:00401106 83E804                  sub eax, 00000004

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401143(C)
|
:00401109 50                      push eax
:0040110A 8D00                    lea eax, dword ptr [eax]
:0040110C 50                      push eax
:0040110D 6A6B                    push 0000006B
:0040110F FF7508                  push [ebp+08]

* Reference To: user32.SetDlgItemTextA, Ord:01F8h
                                  |
:00401112 E823010000              Call 0040123A
:00401117 EB95                    jmp 004010AE

w powyzszym kawaleczku najpierw xoruje pierwsze 4 znaki z 574E5465h (1) a nastepnie kolejne 4 znaki xoruje z 505F564Bh (2) i wypisuje je do drugiego controla, na sam koniec skacze do 004010AE a tam sie znajduje :

:004010AE 58                      pop eax
:004010AF 813852657665            cmp dword ptr [eax], 65766552		<== (3)
:004010B5 751E                    jne 004010D5
:004010B7 83C004                  add eax, 00000004
:004010BA 813872656E64            cmp dword ptr [eax], 646E6572		<== (4)
:004010C0 7513                    jne 004010D5
:004010C2 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Gratulacje!"
                                  |
:004010C4 684A344000              push 0040344A

* Possible StringData Ref from Data Obj ->"Gratuluj"
                                  |
:004010C9 68B7334000              push 004033B7
:004010CE 6A00                    push 00000000

* Reference To: user32.MessageBoxA, Ord:019Dh
                                  |
:004010D0 E859010000              Call 0040122E

no tutaj to juz wszystko widac w linijkach 3 i 4, poprzednio zxorowane wartosci sa ponownie xorowane tylko tym razem musza wyniesc zero. A wiec liczymy:

pierwsze 4 znaki: 65766552^574E5465 = 32383137 0842543415 "2817"
kolejne  4 znaki: 646E6572^505F564B = 34313339 0875639609 "4139"

no wiec haslo to 71829314, proste nie ? :)

pozdrowienia.